package br.ufrgs.engsoft.ejb;

import java.util.Collection;

import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.Stateless;

import br.ufrgs.engsoft.ejb.local.DatabaseEJBLocal;
import br.ufrgs.engsoft.ejb.remote.AutorEJBRemote;
import br.ufrgs.engsoft.entity.Autor;

/**
 * Implementacao do bean de sessao Stateless.
 * Usado para obter informacoes sobre autores.
 */
@Stateless
public class AutorEJB implements AutorEJBRemote {
	@EJB // A injecao ocorre no deploy da aplicacao
	private DatabaseEJBLocal database;
	
	/*
	 * (non-Javadoc)
	 * @see br.ufrgs.engsoft.ejb.AtorEJBLocal#listarAtores()
	 */
	public Collection<Autor> listarAutores() {
		return database.getAutores().values();
	}

	/*
	 * (non-Javadoc)
	 * @see br.ufrgs.engsoft.ejb.AtorEJBLocal#getAutorById(java.lang.Integer)
	 */
	public Autor getAutorById(Integer id) {
		return database.getAutores().get(id);
	}

	public boolean insert(Autor autor) {
		//
		if (autor==null) throw new EJBException("Autor nao pode ser nulo!");
		
		// Caso nao informado usar auto-incremento
		if (autor.getId()==null || autor.getId()==0) autor.setId(database.getNewAutorId());
		
		// Caso tenha referencia com mesmo Id retornar falso
		if (database.getAutores().containsKey(autor.getId())) throw new EJBException("Identificador da Autor já cadastrado!");
		
		// Validacao do preenchimento do campo titulo 
		if (autor.getNome()==null || autor.getNome().isEmpty()) throw new EJBException("Nome deve ser informado!");

		// Adicionando nova referencia a tabela
		database.getAutores().put(autor.getId(), autor);
		return true;
	}


}
